/**
 * Controlador de peticiones.
 */
var Request = {
	template : {
		service      : "",
		callback     : null,
		responseType : "",
		send : function(callback)
		{
			if ( $.isProc(callback) )
				this.callback = callback;

			Services.invoke(this);
		}
	},
	create : function(serviceName, params)
	{
		var request = window[serviceName + "Request"];

		if ( !$.isProc(request) )
			request = {};
		else
			request = new window[serviceName + "Request"]();

		request.extend(this.template);
		request.service = serviceName;

		var values = arguments.toArray().splice(1);
		var $me = this;

		values.each(function(value, i){
			$me.setParam(request, value, this[++i]);
		},0,0,2);

		request.responseType = "service";

		return(request);
	},
	setParam : function(request, paramName, value)
	{
		request[paramName] = value;
	},

	/**
	 * @TODO Verificar conversión a JSON en IE.
	 */
	serialize : function(data, base64)
	{
		data = data || this;

		data = JSONConverter().convert(data, true);
		//data = Packer().pack(data);

		data = Base64().encode(data);

		return( data );
	},
	unserialize : function(data, base64)
	{
		data = base64 ? Base64().decode(data) : unescape(data);

		var obj = Response.makeObject(data);

		return(obj);
	}
};
window.Request = Request;  // Problemas de scope...

/**
 * Cada uno de los siguientes objetos está vinculado a un
 * servicio, y tendrán la estructura de los datos que se pasarán
 * en las eventuales peticiones al servicio. Si el servicio no
 * espera datos, no se necesitará definir el modelo de petición.
 */
var ChdirRequest = function(){
	dir : ""
};
var ChSectionRequest = function(){
	section : ""
};
var sectionInfoRequest = function(){
	section : ""
};
